<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>call和apply</title>
</head>
<body>
    <button>xiasnn</button>
    <button>xiaxia</button>
    <script>
        let zhangsan = {
            name : "张三"
        };

        function User(){
            console.log(this.name);
        }

        //原本User新建的对象中的this都为空，但用call和apply函数，可以将对象的值作为this的内容，并且立即执行
        User.call(zhangsan);
        User.apply(zhangsan);


        // apply和call的不同点：当Student中需要传参，call需要一个一个写出来，而apply中将所有的参数放到一个数组中
        function Student(age,sex){
            console.log('姓名：' + this.name + ',年龄：' + age + ',性别：' + sex);
        }
        Student.call(zhangsan,22,'女');
        Student.apply(zhangsan,[24,'男']);



        // 弹出按钮上的文字
        function show(){
            alert(this.innerHTML);
        }
        let buttons = document.querySelectorAll('button');
        buttons.forEach(value => {
            value.addEventListener('click',function(){ 
                show.call(this);
            })
        })



        // 取数组中最大值
        let arr = [1,2,3,4,5];
        // console.log(Math.max(...arr));
        console.log(Math.max.apply(Math.max,arr));
    </script>
</body>
</html>